package com.bascker.algorithm.practice.sliding_window.easy.find_max_consecutive_one;

import java.util.Objects;

/**
 * 最大连续1的个数: 给定一个二进制数组， 计算其中最大连续1的个数
 *
 *  For example:
 *      in: [1,1,0,1,1,1]       out: 3
 *
 * @author bascker
 * @apiNote from leetcode T485
 */
public class Solution {

    // 滑动窗口：1次遍历， 时间复杂度：O(n); 空间复杂度：O(1)
    public int findMaxConsecutiveOnes(int[] nums) {
        int max = 0;
        if (Objects.isNull(nums) || nums.length < 1) {
            return max;
        }

        int n = nums.length;
        int left = 0;
        int right = 0;
        // 滑动窗口: 在 [left, right] 这个窗口中进行计数
        while (right < n) {
            if (nums[right] == 0) {
                max = Math.max(max, right - left);

                // 右指针右移
                right ++;
                // 左指针移到右指针位置
                left = right;
            } else {
                right++;
            }
        }

        return Math.max(max, right - left);
    }

}
